package com.itany.corejava.code09_集合.map集合;

import java.util.*;
import java.util.Map.Entry;

/**
 * @author 石小俊
 * @date 2023年05月08日 11:16
 */
public class Test02_遍历 {

    public static void main(String[] args) {
        Map<Integer, Student> map = new HashMap<>();
        Student student = new Student(1, "admin");
        Student student2 = new Student(2, "alice");
        Student student3 = new Student(3, "jack");
        map.put(student.getId(), student);
        map.put(student2.getId(), student2);
        map.put(student3.getId(), student3);
        // test01(map);
        // test02(map);
        test03(map);
    }

    /**
     * 通过keySet() 获取所有的key 的集合, 然后遍历所有的key
     */
    public static void test01(Map<Integer, Student> map) {
        // 取出Map集合中所有的key,返回一个Set集合
        Set<Integer> keys = map.keySet();
        for (Integer key : keys) {
            // 此时遍历的是所有的key
            // 可以根据key获取到对应的value
            Student student = map.get(key);
            System.out.println("key:" + key + ",value:" + student);
        }
    }

    /**
     * 通过values() 获取所有的value的集合, 然后遍历所有的value
     */
    public static void test02(Map<Integer, Student> map) {
        // 取出Map集合中所有的value,返回一个Collection集合
        Collection<Student> values = map.values();
        for (Student student : values) {
            System.out.println(student);
        }
    }

    /**
     * 通过entrySet() 获取所有的key-value 的集合, 然后遍历所有的key-value 键值对
     */
    public static void test03(Map<Integer, Student> map) {
        Set<Map.Entry<Integer, Student>> entries = map.entrySet();
        // Iterator<Map.Entry<Integer, Student>> it = entries.iterator();
        // 如果不想写Map.Entry,而是直接使用Entry,需要手动导包
        Iterator<Entry<Integer, Student>> it = entries.iterator();
        while (it.hasNext()) {
            Entry<Integer, Student> entry = it.next();
            // 取出对应的key与value
            Integer key = entry.getKey();
            Student value = entry.getValue();
            System.out.println("key:" + key + ",value:" + value);
        }
    }
}
